PANDAs = PANel DAta Structure
pandas
introduce tres nuevos tipos de estructura de datos:
Series
: Es una estructura de datos de 1D, como si fuera un vector de datos con índices.
DataFrame
: Es una estructura de datos de 2D, como si fuera un diccionario de Series
.
Panel
: Es una estructura de datos de nD (con $n \ge 3$), como si fuera un diccionario de DataFrame
s.
(imagen extraída de aquí)
In [ ]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(19760812)
%matplotlib inline
In [ ]:
s = pd.Series()
In [ ]:
df = pd.DataFrame()
In [ ]:
p = pd.Panel()
In [ ]:
print(s, df, p, sep = '\n' * 2)
Una Series
es un array indexado:
• Un NumPy array mapea un rango de números enteros a valores.
• Una Series
mapea un grupo arbitrario de etiquetas a valores.
• Una Series
se puede ver también como un diccionario especializado donde todos los valores poseen el mismo tipo y se encuentran almacenados de forma eficiente.
In [ ]:
s = pd.Series({'a' : 1000, 'b' : 2000, 'c' : 3000, 'd' : 4000})
In [ ]:
s['b']
Para acceder a las etiquetas se usa el atributo s.index
mientras que para acceder a los valores se usa el atributo s.values
(NumPy array).
In [ ]:
help(pd.Series)
In [ ]:
lista = [1,10,100,1000]
dicc = {'a': 1, 'b': 10, 'c': 100, 'd': 1000}
In [ ]:
# creación a partir de una lista
s1 = pd.Series(data = lista, index = ['a','b','c','d'], name = 'Mi Serie')
In [ ]:
# creación a partir de un diccionario
s2 = pd.Series(data = dicc, name = 'Mi Serie')
In [ ]:
# cread s3 a partir de un numpy array
In [ ]:
s1
In [ ]:
s2
In [ ]:
s1.index
In [ ]:
s1.values
In [ ]:
# Acceder a un elemento, como si fuera un diccionario
s1['a']
In [ ]:
# Acceder a un elemento como si fuera un numpy array
s1[0]
In [ ]:
s1[0:3]
In [ ]:
s1['a':'c']
In [ ]:
# Se pueden añadir nuevos elementos como si fuera un diccionario
s1['e'] = 10000
In [ ]:
s1
In [ ]:
s2
In [ ]:
# Podemos hacer operaciones como si fueran numpy arrays
s1 / 10
In [ ]:
# Alineamiento de índices, las operaciones se hacen vía índice
s1 + s2
Un DataFrame
puede considerarse que es como un diccionario de Series
que comparten índices comunes:
• Dataframes
tienen índices para filas (index) y columnas (columns).
• Cada columna puede poseer un tipo de dato diferente.
• Añadir nuevas columnas es 'barato'.
In [ ]:
df = pd.DataFrame(np.random.randn(10, 3), columns = ['col1', 'col2', 'col3'])
In [ ]:
df
Pensad en un DataFrame
como en una 'pestaña' (hoja) de una hoja de cálculos, o en una tabla en una Base de Datos SQL.
In [ ]:
help(pd.DataFrame)
In [ ]:
# Cread un dataframe a partir de s1 y s2
In [ ]:
# Cread un dataframe a partir de un diccionario de numpy arrays
In [ ]:
# Se puede acceder a una columna (una Series) como si accediéramos a la clave de un diccionario
df['col1']
In [ ]:
# Podemos acceder a los índices como si fuera una Series
df.index
In [ ]:
# Además, podemos acceder a las columnas
df.columns
Se puede ver como un diccionario de DataFrame
s.
Para no sobrecargar el vistazo que vamos a hacer a pandas
no hablaremos más sobre Panel
es ya que es una estructura de datos que se usa menos en la práctica.
In [ ]:
help(pd.Panel)